#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Generic;
using Cephei.QL;
using Cephei.QL.Times;
namespace Cephei.QL.Experimental.Commodities
{
     // <summary> 
	// ! Commodity term structure
	// </summary>
    [Guid ("33B8E357-EEFE-494a-97B6-BE4B697D7369"),ComVisible(true)]
	public interface ICommodityCurve : Cephei.QL.ITermStructure
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        
		 Cephei.QL.Experimental.Commodities.ICommodityCurve BasisOfCurve {get;}
        
		 Double BasisOfPrice(DateTime d);
        // <summary> 
		// ASC091131 Added missing functions
		// </summary>
		 Cephei.QL.Experimental.Commodities.ICommodityType CommodityType {get;}
        // <summary> 
		// ASC091131 Added missing functions
		// </summary>
		 Cephei.QL.ICurrency Currency {get;}
        
		 Cephei.IVector<DateTime> Dates {get;}
        
		 Boolean Empty {get;}
        
		 DateTime MaxDate {get;}
        
		 String Name {get;}
        
		 Cephei.IVector<Double> Prices {get;}
        
		 ICommodityCurve SetBasisOfCurve(Cephei.QL.Experimental.Commodities.ICommodityCurve basisOfCurve);
        
		 Cephei.IVector<Double> Times {get;}
        // <summary> 
		// ASC091131 Added missing functions
		// </summary>
		 Cephei.QL.Experimental.Commodities.IUnitOfMeasure UnitOfMeasure {get;}
    }

    // <summary> 
	// ! Commodity term structure Factory
	// </summary>
   	[ComVisible(true)]
    public interface ICommodityCurve_Factory // : Collection_Factory<ICommodityCurve, ICell<ICommodityCurve>>
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        
	    ICommodityCurve Create (String name, Cephei.QL.Experimental.Commodities.ICommodityType commodityType, Cephei.QL.ICurrency currency, Cephei.QL.Experimental.Commodities.IUnitOfMeasure unitOfMeasure, Cephei.QL.Times.ICalendar calendar, Microsoft.FSharp.Core.FSharpOption<Cephei.QL.Times.IDayCounter> dayCounter);
        
	    ICommodityCurve Create (String name, Cephei.QL.Experimental.Commodities.ICommodityType commodityType, Cephei.QL.ICurrency currency, Cephei.QL.Experimental.Commodities.IUnitOfMeasure unitOfMeasure, Cephei.QL.Times.ICalendar calendar, Cephei.IVector<DateTime> dates, Cephei.IVector<Double> prices, Microsoft.FSharp.Core.FSharpOption<Cephei.QL.Times.IDayCounter> dayCounter);
    }
}

